[PR]

水無瀬の部屋 > Programming > sample > dumptext > mainbox.cpp
最終更新日: 2007/03/25

   1: //*********************************************************
   2: // プロジェクト: dumptext
   3: //  ファイル名: mainbox.cpp
   4: //*********************************************************
   5: #include "mainbox.h"
   6: #include "res.h"
   7: #include <dlg/browsbox/browsbox.h>
   8: 
   9: 
  10: //---------------------------------------------------------
  11: // マクロ の 定義
  12: //---------------------------------------------------------
  13: #define PROP_DIALOGPARAM  "PROP_DIALOGPARAM"
  14: 
  15: 
  16: //---------------------------------------------------------
  17: // ファイルスコープ関数 の 宣言
  18: //---------------------------------------------------------
  19: static INT_PTR CALLBACK MainBoxProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
  20: 
  21: 
  22: //*********************************************************
  23: // MainBox
  24: //*********************************************************
  25: bool
  26: MainBox
  27: 	(
  28: 		DUMPTEXT_t *dt
  29: 	)
  30: {
  31: 	// パラメタの仮定
  32: 	ASSERT( IsValidPtr( dt, sizeof( *dt ) ) );
  33: 	ASSERT( IsValidLocalPathString( dt->datafile ) );
  34: 	ASSERT( IsValidLocalPathString( dt->dumpfile ) );
  35: 
  36: 	HINSTANCE hInstance = GetModuleHandle( null );
  37: 	return IDOK == DialogBoxPtrParam
  38: 		( 
  39: 			hInstance,
  40: 			MAKEINTRESOURCE( MAIN_BOX ),
  41: 			HWND_DESKTOP,
  42: 			MainBoxProc,
  43: 			dt
  44: 		);
  45: }//MainBox
  46: 
  47: 
  48: //******************************************************************************************************************
  49: //
  50: //******************************************************************************************************************
  51: static INT_PTR OnMainDestroy( HWND hWnd );
  52: static INT_PTR OnMainHitTest( HWND hWnd, WPARAM wParam, LPARAM lParam );
  53: static INT_PTR OnMainInitDialog( HWND hWnd, LPARAM lParam );
  54: static INT_PTR OnMainCommand( HWND hWnd, WPARAM wParam, LPARAM lParam );
  55: 
  56: 
  57: //*********************************************************
  58: // MainBoxProc
  59: //*********************************************************
  60: static
  61: INT_PTR
  62: CALLBACK
  63: MainBoxProc
  64: 	(
  65: 		HWND   hWnd,
  66: 		UINT   uMsg,
  67: 		WPARAM wParam,
  68: 		LPARAM lParam
  69: 	)
  70: {
  71: 	// パラメタの仮定
  72: 	ASSERT( IsValidWindow( hWnd ) );
  73: 
  74: 	switch( uMsg )
  75: 	{
  76: 		case WM_DESTROY:       return OnMainDestroy( hWnd );
  77: 		case WM_NCHITTEST:     return OnMainHitTest( hWnd, wParam, lParam );
  78: 		case WM_INITDIALOG:    return OnMainInitDialog( hWnd, lParam );
  79: 		case WM_COMMAND:       return OnMainCommand( hWnd, wParam, lParam );
  80: 		default:               return false;
  81: 	}
  82: }//MainBoxProc
  83: 
  84: //*********************************************************
  85: // OnMainDestroy
  86: //*********************************************************
  87: static
  88: INT_PTR
  89: OnMainDestroy
  90: 	(
  91: 		HWND hWnd
  92: 	)
  93: {
  94: 	// パラメタの仮定
  95: 	ASSERT( IsValidWindow( hWnd ) );
  96: 
  97: 	VERIFY( RemoveProp( hWnd, PROP_DIALOGPARAM ) );
  98: 
  99: 	return true;
 100: }//OnMainDestroy
 101: 
 102: //*********************************************************
 103: // OnMainInitDialog
 104: //*********************************************************
 105: static
 106: INT_PTR
 107: OnMainInitDialog
 108: 	(
 109: 		HWND   hWnd,
 110: 		LPARAM lParam
 111: 	)
 112: {
 113: 	// パラメタの仮定
 114: 	ASSERT( IsValidWindow( hWnd ) );
 115: 	ASSERT( IsValidPtr( (DUMPTEXT_t *)lParam, sizeof(DUMPTEXT_t) ) );
 116: 
 117: 	//
 118: 	DUMPTEXT_t *dt = reinterpret_cast<DUMPTEXT_t *>( lParam );
 119: 	VERIFY( SetProp( hWnd, PROP_DIALOGPARAM, dt ) );
 120: 	VERIFY( WindowMoveToCursorPos( hWnd ) );
 121: 
 122: 	//
 123: 	{
 124: 		HWND hEditInputFile = GetDlgItem( hWnd, IDC_INPUTFILE );
 125: 		Edit_LimitText( hEditInputFile, MAX_PATH );
 126: 		SetWindowText( hEditInputFile, dt->datafile );
 127: 	}
 128: 
 129: 	//
 130: 	{
 131: 		HWND hEditOutputFile = GetDlgItem( hWnd, IDC_OUTPUTFILE );
 132: 		Edit_LimitText( hEditOutputFile, MAX_PATH );
 133: 		SetWindowText( hEditOutputFile, dt->dumpfile );
 134: 	}
 135: 
 136: 	//
 137: 	{
 138: 		HWND hEditStartAddress = GetDlgItem( hWnd, IDC_STARTADDR );
 139: 		HWND hSpinStartAddress = GetDlgItem( hWnd, IDC_SPINSTARTADDR );
 140: 		Spin_SetBuddy( hSpinStartAddress, hEditStartAddress );
 141: 		Spin_SetRange( hSpinStartAddress, 0, UD_MAXVAL );
 142: 		Spin_SetPos( hSpinStartAddress, dt->start );
 143: 		SetDlgItemInt( hWnd, IDC_STARTADDR, dt->start, false );
 144: 	}
 145: 
 146: 	//
 147: 	{
 148: 		HWND hEditStopAddress = GetDlgItem( hWnd, IDC_STOPADDR );
 149: 		HWND hSpinStopAddress = GetDlgItem( hWnd, IDC_SPINSTOPADDR );
 150: 		Spin_SetBuddy( hSpinStopAddress, hEditStopAddress );
 151: 		Spin_SetRange( hSpinStopAddress, 0, UD_MAXVAL );
 152: 		Spin_SetPos( hSpinStopAddress, dt->stop );
 153: 		SetDlgItemInt( hWnd, IDC_STOPADDR, dt->stop, false );
 154: 	}
 155: 
 156: 	return true;
 157: }//OnMainInitDialog
 158: 
 159: //*********************************************************
 160: // OnMainHitTest
 161: //*********************************************************
 162: static INT_PTR OnMainHitTest( HWND hWnd, WPARAM wParam, LPARAM lParam )
 163: {
 164: 	// パラメタの仮定
 165: 	ASSERT( IsValidWindow( hWnd ) );
 166: 
 167: 	// ウィンドウのクライアント領域を掴んで移動
 168: 	const LRESULT lResult = DefWindowProc( hWnd, WM_NCHITTEST, wParam, lParam );
 169: 	SetWindowLongPtr64( hWnd, DWL_MSGRESULT, (HTCLIENT == lResult) ? HTCAPTION : lResult );
 170: 
 171: 	return true;
 172: }//OnMainHitTest
 173: 
 174: 
 175: //******************************************************************************************************************
 176: //
 177: //******************************************************************************************************************
 178: static INT_PTR OnMainCommandOK( HWND hWnd );
 179: static INT_PTR OnMainCommandCancel( HWND hWnd );
 180: static INT_PTR OnMainCommandBrowseInputFile( HWND hWnd );
 181: static INT_PTR OnMainCommandBrowseOutputFile( HWND hWnd );
 182: 
 183: 
 184: //*********************************************************
 185: // OnMainCommand
 186: //*********************************************************
 187: static
 188: INT_PTR
 189: OnMainCommand
 190: 	(
 191: 		HWND   hWnd,
 192: 		WPARAM wParam,
 193: 		LPARAM
 194: 	)
 195: {
 196: 	// パラメタの仮定
 197: 	ASSERT( IsValidWindow( hWnd ) );
 198: 
 199: 	switch( LOWORD(wParam) )
 200: 	{
 201: 		case IDOK:             return OnMainCommandOK( hWnd );
 202: 		case IDCANCEL:         return OnMainCommandCancel( hWnd );
 203: 		case IDC_BROWSEINPUT:  return OnMainCommandBrowseInputFile( hWnd );
 204: 		case IDC_BROWSEOUTPUT: return OnMainCommandBrowseOutputFile( hWnd );
 205: 		default:               return false;
 206: 	}
 207: }//OnMainCommand
 208: 
 209: //*********************************************************
 210: // OnMainCommandOK
 211: //*********************************************************
 212: static
 213: INT_PTR
 214: OnMainCommandOK
 215: 	(
 216: 		HWND hWnd
 217: 	)
 218: {
 219: 	// パラメタの仮定
 220: 	ASSERT( IsValidWindow( hWnd ) );
 221: 
 222: 	// 取得
 223: 	DUMPTEXT_t *dt = (DUMPTEXT_t *)GetProp( hWnd, PROP_DIALOGPARAM );
 224: 	GetDlgItemText( hWnd, IDC_INPUTFILE,  dt->datafile, numof(dt->datafile) );
 225: 	GetDlgItemText( hWnd, IDC_OUTPUTFILE, dt->dumpfile, numof(dt->dumpfile) );
 226: 	dt->start = GetDlgItemInt( hWnd, IDC_STARTADDR, null, false );
 227: 	dt->stop  = GetDlgItemInt( hWnd, IDC_STOPADDR,  null, false );
 228: 	dt->start = max(0, dt->start);
 229: 
 230: 	//
 231: 	if ( ('\0' != dt->datafile[0]) && IsValidLocalPathString( dt->datafile )
 232: 	  && ('\0' != dt->dumpfile[0]) && IsValidLocalPathString( dt->dumpfile ) )
 233: 	{
 234: 		VERIFY( EndDialog( hWnd, IDOK ) );
 235: 	}
 236: 
 237: 	return true;
 238: }//OnMainCommandOK
 239: 
 240: //*********************************************************
 241: // OnMainCommandCancel
 242: //*********************************************************
 243: static
 244: INT_PTR
 245: OnMainCommandCancel
 246: 	(
 247: 		HWND hWnd
 248: 	)
 249: {
 250: 	// パラメタの仮定
 251: 	ASSERT( IsValidWindow( hWnd ) );
 252: 
 253: 	VERIFY( EndDialog( hWnd, IDCANCEL ) );
 254: 
 255: 	return true;
 256: }//OnMainCommandCancel
 257: 
 258: //*********************************************************
 259: // OnMainCommandBrowseInputFile
 260: //*********************************************************
 261: static
 262: INT_PTR
 263: OnMainCommandBrowseInputFile
 264: 	(
 265: 		HWND hWnd
 266: 	)
 267: {
 268: 	// パラメタの仮定
 269: 	ASSERT( IsValidWindow( hWnd ) );
 270: 
 271: 	//
 272: 	char path[ MAX_PATH_BUF ];
 273: 	HWND hEditInputFile = GetDlgItem( hWnd, IDC_INPUTFILE );
 274: 	GetWindowText( hEditInputFile, path, numof(path) );
 275: 
 276: 	//
 277: 	char buffer[ MAX_PATH_BUF ];
 278: 	if ( SaveFileBox( 
 279: 		hWnd,
 280: 		OFN_HIDEREADONLY,
 281: 		buffer,
 282: 		numof(buffer), 
 283: 		path,
 284: 		"入力ファイルの選択",
 285: 		"すべてのファイル\0*.*\0" ) )
 286: 	{
 287: 		SetWindowText( hEditInputFile, buffer );
 288: 	}
 289: 
 290: 	return true;
 291: }//OnMainCommandBrowseInputFile
 292: 
 293: //*********************************************************
 294: // OnMainCommandBrowseOutputFile
 295: //*********************************************************
 296: static
 297: INT_PTR
 298: OnMainCommandBrowseOutputFile
 299: 	(
 300: 		HWND hWnd
 301: 	)
 302: {
 303: 	// パラメタの仮定
 304: 	ASSERT( IsValidWindow( hWnd ) );
 305: 
 306: 	//
 307: 	char path[ MAX_PATH_BUF ];
 308: 	HWND hEditOutputFile = GetDlgItem( hWnd, IDC_OUTPUTFILE );
 309: 	GetWindowText( hEditOutputFile, path, numof(path) );
 310: 
 311: 	//
 312: 	char buffer[ MAX_PATH_BUF ];
 313: 	if ( SaveFileBox(
 314: 		hWnd,
 315: 		OFN_HIDEREADONLY,
 316: 		buffer,
 317: 		numof(buffer),
 318: 		path,
 319: 		"出力ファイル名の選択",
 320: 		"すべてのファイル\0*.*\0" ) )
 321: 	{
 322: 		SetWindowText( hEditOutputFile, buffer );
 323: 	}
 324: 
 325: 	return true;
 326: }//OnMainCommandBrowseOutputFile
 327: 
 328: 
 329: //** end **
 330: 
 331: 

参照:


Google
ご意見・ご感想をお聞かせ下さい。匿名で送信できます。

 * 返信が必要な場合には postmaster@katsura-kotonoha.sakura.ne.jp へ直接メールしてください。

水無瀬の部屋 > sample > dumptext > mainbox.cpp

このページは cpp2web が出力しました。
水無瀬 優 postmaster@katsura-kotonoha.sakura.ne.jp
http://katsura-kotonoha.sakura.ne.jp/prog/code/dumptext/mainbox_cpp.shtml
『新妻LOVELY×CATION』を応援しています!